home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2001 December / pcwk12201b.iso / Wersje pelne i specjalne / Winamp 2.77 i 3.0beta / wasabi-sdk_beta1.exe / jnetlib / httpget.h < prev    next >
C/C++ Source or Header  |  2001-10-08  |  5KB  |  138 lines

  1. /*
  2.  
  3.   Nullsoft WASABI Source File License
  4.  
  5.   Copyright 1999-2001 Nullsoft, Inc.
  6.  
  7.     This software is provided 'as-is', without any express or implied
  8.     warranty.  In no event will the authors be held liable for any damages
  9.     arising from the use of this software.
  10.  
  11.     Permission is granted to anyone to use this software for any purpose,
  12.     including commercial applications, and to alter it and redistribute it
  13.     freely, subject to the following restrictions:
  14.  
  15.     1. The origin of this software must not be misrepresented; you must not
  16.        claim that you wrote the original software. If you use this software
  17.        in a product, an acknowledgment in the product documentation would be
  18.        appreciated but is not required.
  19.     2. Altered source versions must be plainly marked as such, and must not be
  20.        misrepresented as being the original software.
  21.     3. This notice may not be removed or altered from any source distribution.
  22.  
  23.  
  24.   Brennan Underwood
  25.   brennan@nullsoft.com
  26.  
  27. */
  28.  
  29. /*
  30. ** JNetLib
  31. ** Copyright (C) 2000-2001 Nullsoft, Inc.
  32. ** Author: Justin Frankel
  33. ** File: httpget.h - JNL interface for doing HTTP GETs.
  34. ** License: see jnetlib.h
  35. **
  36. ** Usage:
  37. **   1. Create a JNL_HTTPGet object, optionally specifying a JNL_AsyncDNS
  38. **      object to use (or NULL for none, or JNL_CONNECTION_AUTODNS for auto),
  39. **      and the receive buffer size, and a string specifying proxy (or NULL 
  40. **      for none). See note on proxy string below.
  41. **   2. call addheader() to add whatever headers you want. It is recommended to
  42. **      add at least the following two:
  43. **        addheader("User-Agent:MyApp (Mozilla)");
  44. *///      addheader("Accept:*/*");
  45. /*         ( the comment weirdness is there so I Can do the star-slash :)
  46. **   3. Call connect() with the URL you wish to GET (see URL string note below)
  47. **   4. Call run() once in a while, checking to see if it returns -1 
  48. **      (if it does return -1, call geterrorstr() to see what the error is).
  49. **      (if it returns 1, no big deal, the connection has closed).
  50. **   5. While you're at it, you can call bytes_available() to see if any data
  51. **      from the http stream is available, or getheader() to see if any headers
  52. **      are available, or getreply() to see the HTTP reply, or getallheaders() 
  53. **      to get a double null terminated, null delimited list of headers returned.
  54. **   6. If you want to read from the stream, call get_bytes (which returns how much
  55. **      was actually read).
  56. **   7. content_length() is a helper function that uses getheader() to check the
  57. **      content-length header.
  58. **   8. Delete ye' ol' object when done.
  59. **
  60. ** Proxy String:
  61. **   should be in the format of host:port, or user@host:port, or 
  62. **   user:password@host:port. if port is not specified, 80 is assumed.
  63. ** URL String:
  64. **   should be in the format of http://user:pass@host:port/requestwhatever
  65. **   note that user, pass, port, and /requestwhatever are all optional :)
  66. **   note that also, http:// is really not important. if you do poo://
  67. **   or even leave out the http:// altogether, it will still work.
  68. */
  69.  
  70. #ifndef _HTTPGET_H_
  71. #define _HTTPGET_H_
  72.  
  73. #include "connection.h"
  74.  
  75. class JNL_HTTPGet
  76. {
  77.   public:
  78.     JNL_HTTPGet(JNL_AsyncDNS *dns=JNL_CONNECTION_AUTODNS, int recvbufsize=16384, char *proxy=NULL);
  79.     ~JNL_HTTPGet();
  80.  
  81.     void addheader(const char *header);
  82.  
  83.     void connect(const char *url);
  84.  
  85.     int run(); // returns: 0 if all is OK. -1 if error (call geterrorstr()). 1 if connection closed.
  86.  
  87.     int   get_status(); // returns 0 if connecting, 1 if reading headers, 
  88.                         // 2 if reading content, -1 if error.
  89.  
  90.     char *getallheaders(); // double null terminated, null delimited list
  91.     char *getheader(char *headername);
  92.     char *getreply() { return m_reply; }
  93.     int   getreplycode(); // returns 0 if none yet, otherwise returns http reply code.
  94.  
  95.     char *geterrorstr() { return m_errstr;}
  96.  
  97.     int bytes_available();
  98.     int get_bytes(char *buf, int len);
  99.     int peek_bytes(char *buf, int len);
  100.  
  101.     int content_length() { char *p=getheader("content-length"); if (p) return atoi(p); return 0; }
  102.  
  103.     JNL_Connection *get_con() { return m_con; }
  104.  
  105.   protected:
  106.     void reinit();
  107.     void deinit();
  108.     void seterrstr(char *str) { if (m_errstr) free(m_errstr); m_errstr=(char*)malloc(strlen(str)+1); strcpy(m_errstr,str); }
  109.  
  110.     void do_parse_url(char *url, char **host, int *port, char **req, char **lp);
  111.     void do_encode_mimestr(char *in, char *out);
  112.  
  113.     JNL_AsyncDNS *m_dns;
  114.     JNL_Connection *m_con;
  115.     int m_recvbufsize;
  116.  
  117.     int m_http_state;
  118.  
  119.     int m_http_port;
  120.     char *m_http_url;
  121.     char *m_http_host;
  122.     char *m_http_lpinfo;
  123.     char *m_http_request;
  124.  
  125.     char *m_http_proxylpinfo;
  126.     char *m_http_proxyhost;
  127.     int   m_http_proxyport;
  128.  
  129.     char *m_sendheaders;
  130.     char *m_recvheaders;
  131.     int m_recvheaders_size;
  132.     char *m_reply;
  133.  
  134.     char *m_errstr;
  135. };
  136.  
  137. #endif // _HTTPGET_H_
  138.